package it.azienda.managerworkstandard.view;

import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.framework.utilita.Utilita;
import it.azienda.framework.view.Dettaglio;
import it.azienda.managerworkstandard.modello.BeanCategoriaPro;
import it.azienda.managerworkstandard.modello.BeanProdottoDett;
import java.util.ArrayList;
import javax.faces.component.html.HtmlForm;
import javax.faces.context.FacesContext;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DettaglioCategoriaPro extends Dettaglio{
    
    private HtmlForm form = new HtmlForm();
    private BeanCategoriaPro beanCategoriaPro;
    
    public void setBeanCategoriaPro(BeanCategoriaPro beanCategoriaPro) {
        setObj(beanCategoriaPro);
        this.beanCategoriaPro = beanCategoriaPro;
    }
    
    public BeanCategoriaPro getBeanCategoriaPro(){
        return (BeanCategoriaPro)getObj();
    }
    
    public HtmlForm getForm() {
        form = (HtmlForm) Utilita.getSession().getAttribute("form");
        if (form == null) {
            form = new HtmlForm();
        }
        Utilita.getSession().removeAttribute("form");
        return form;
    }
    
    public void setForm(HtmlForm form) {
        setFormObject(form);
        this.form = form;
        Utilita.getSession().setAttribute("form",form);
    }
    
    public boolean controlliPrimaSalvataggio() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanCategoriaPro =(BeanCategoriaPro) ctx.getExternalContext().getRequestMap().get("beanCategoriaPro");
        boolean errori = false;
        
        if(beanCategoriaPro.getCodice() == null){
            String query=" select max(categoria_Pro.codice) from BeanCategoriaPro categoria_Pro";
            Session session = null;
            Transaction tr = null;
            try {
                session = DAOConnectionSingleton.newSession();
                tr = session.beginTransaction();
                Query q = null;
                q = session.createQuery(query);
                ArrayList listaCodice = (ArrayList) q.list();
                Integer cod=(Integer) listaCodice.get(0);
                if(cod!=null){
                    this.beanCategoriaPro.setCodice(new Integer(cod.intValue()+1));
                }else{
                    this.beanCategoriaPro.setCodice(new Integer(1));
                }
            } catch (Exception e) {
            }
        }
        return false;
    }
    
    public void dopoModifica(Object obj){
        BeanCategoriaPro categoriaPro=(BeanCategoriaPro)obj;
        //Cambio l'iva a tutti i prodotti
        String query="select prodottoDett from BeanProdotto beanProdotto, BeanProdottoDett prodottoDett," +
                " BeanCategoriaPro categoriaPro" +
                " where categoriaPro.id = :idCategoria" +
                " and categoriaPro.id = beanProdotto.beanCategoriaPro.id" +
                " and prodottoDett.beanProdotto.id = beanProdotto.id";
        Query q=null;
        try{
            Session sessione = DAOConnectionSingleton.newSession();
            DAOConnectionSingleton.beginTransaction();
            q = sessione.createQuery(query);
            q.setInteger("idCategoria", categoriaPro.getId().intValue());
            ArrayList lista = (ArrayList) q.list();
            DAOConnectionSingleton.commitTransaction();
            if(lista.size()!=0){
                for(int i=0;i<lista.size();i++){
                    BeanProdottoDett prodottoDett=(BeanProdottoDett)lista.get(i);
                    
                    Double prezzoAcquisto=new Double(0);
                    Double prezzoVendita=new Double(0);
                    Double iva=categoriaPro.getIva();
                    Double sconto=new Double(0);
                    Double ricarico=new Double(0);
                    
                    if(prodottoDett.getPrezzoAcquisto()!=null){
                        prezzoAcquisto=prodottoDett.getPrezzoAcquisto();
                    }
                    if(prodottoDett.getRicarico()!=null){
                        ricarico=prodottoDett.getRicarico();
                    }
                    if(prodottoDett.getSconto()!=null){
                        sconto=prodottoDett.getSconto();
                    }
                    
                    prezzoVendita=prezzoAcquisto;
                    if(iva!=null){
                        prezzoVendita=new Double(prezzoVendita.doubleValue() + (prezzoVendita.doubleValue() / 100 * iva.doubleValue()));
                    }
                    if(ricarico!=null){
                        prezzoVendita=new Double(prezzoVendita.doubleValue() + (prezzoVendita.doubleValue() / 100 * ricarico.doubleValue()));
                    }
                    if(sconto!=null){
                        prezzoVendita=new Double(prezzoVendita.doubleValue() - (prezzoVendita.doubleValue() / 100 * sconto.doubleValue()));
                    }
                    //Nuovo Prodotto
                    prodottoDett.setPrezzoVendita(arrotonda(prezzoVendita,2));
                    prodottoDett.setIva(iva);
                    DAOConnectionSingleton.beginTransaction();
                    prodottoDett.modifica();
                    DAOConnectionSingleton.commitTransaction();
                    sessione.flush();
                }
            }
        }catch(Exception e){
            
        }
    }
    public Double arrotonda(Object obj,int precisione){
        Double valore=(Double)obj;
        Double valoreArr=new Double(0);
        double pot = Math.pow(10, precisione);
        double  v = valore.doubleValue() * pot;
        valoreArr = new Double(Math.round(v) / pot);
        return valoreArr;
    }
}